// 事件 event.js

var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();

event.on('some_event', function(){
	console.log('some_event occured.');
});				// 注册一个some_event的监听器

setTimeout(function(){
	event.emit('some_event');
}, 1000);			// 通过setTimeout在1000毫秒之后向event对象发送事件some_event，此时会调用some_event的监听器。


/*
node_js程序由事件循环开始到时间循环结束，所有逻辑都是事件的回调函数，所以node_js始终在事件循环中，
程序入口就是事件循环第一个事件的回调函数。

事件的回调函数在执行的过程中可能会发送出io请求或直接发射（emit）事件，执行完毕后再返回事件循环，事件循环会检查事件队列中
有没有未处理的事件，直到程序结束。

node_js没有显式的事件循环，事件循环对开发者不可见，由libev库实现。
libev支持多种类型的事件：ev_io, ev_timer, ev_signal, ev_idle等，在nodejs中均被EventEmitter封装。

libev事件循环的每一次迭代，在node_js中就是一次tick，libev不断检查是否有活动的、可供检测的事件监听器，直到检测不到时才退出事件循环，进程结束。
*/

